class Solution {
    public:
        int subarraySum(vector<int>& nums, int k) {
            int n=nums.size();
            vector<int>dp(n,0);
            dp[0]=nums[0];
            for(int i=1;i<n;i++)
            {
                dp[i]=dp[i-1]+nums[i];        //{1,2,3} k=2  1 3 6 k=3 
            }
            int ans=0;
            unordered_map<int,int> cnt;
            cnt[0]=1;
            //dp[j]-dp[i]=k  dp[i]=dp[j]-k 0<=i<j<n
           for(int sj:dp)
           {
            if(cnt.contains(sj-k)){
                ans+=cnt[sj-k];
            }
            cnt[sj]++;
           }
    
           return ans;
    
        }
    };